https://laihao2.com/Home/GHG_MST_COMMUTE_Index
ASP.NET開發操作流程:資料表設定好>再寫程式:加入資料庫>串聯資料庫>產生Models裡面類別檔dao>按:建置>Controllers裡面的Entities>產生畫面View
資料表設定好>再寫程式:加入資料庫>串聯資料庫>
USE [ProductDB]
GO
/****** Object: Table [dbo].[GHG_MST_COMMUTE] Script Date: 2024/9/27 下午 08:54:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[GHG_MST_COMMUTE](
[USEDT] [datetime2](7) NOT NULL,
[USER_ID] [nvarchar](200) NOT NULL,
[USER_NAME] [nvarchar](200) NOT NULL,
[TRANSPORTATION] [nvarchar](200) NOT NULL,
[ONEWAY_KM] [decimal](18, 2) NOT NULL,
[data] [datetime] NULL,
[CreatedBy] [nvarchar](max) NULL,
[DOUBLE_KM] [decimal](18, 2) NULL,
CONSTRAINT [PK_GHG_MST_COMMUTE] PRIMARY KEY CLUSTERED
(
[USER_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
解釋程式碼
這段SQL腳本是用於在數據庫 ProductDB
中創建一張名為 [GHG_MST_COMMUTE]
的表。它定義了表的結構、字段以及主鍵約束。以下是詳細解釋:
USE [ProductDB]
:
選擇並使用數據庫 ProductDB
作為當前操作的數據庫。
SET ANSI_NULLS ON
:
開啟 ANSI_NULLS 設置,這意味著在 SQL 中使用 =
和 <>
比較時,NULL
值不會被認為等於任何值。
SET QUOTED_IDENTIFIER ON
:
開啟 QUOTED_IDENTIFIER
,這允許在雙引號內引用對象名稱(例如列或表名稱),並區分與字符串常量的單引號。
CREATE TABLE [dbo].[GHG_MST_COMMUTE]
:
創建表 GHG_MST_COMMUTE
,存儲與通勤相關的數據。表的字段及其數據類型如下:
NOT NULL
: 日期時間字段,精度為 7 位,用於記錄使用日期,不能為空。 NOT NULL
: 用戶 ID,最大長度為 200 的字符串,不能為空。 NOT NULL
: 用戶名,最大長度為 200 的字符串,不能為空。[TRANSPORTATION] [nvarchar](200) NOT NULL
: 交通方式,最大長度為 200 的字符串,不能為空。[ONEWAY_KM] [decimal](18, 2) NOT NULL
: 單程距離,精度為18,總位數2位小數,不能為空。[data] [datetime] NULL
: 日期時間字段,可以為空。[CreatedBy] [nvarchar](max) NULL
: 創建者,字符串類型,可以存儲任意長度的數據,可以為空。[DOUBLE_KM] [decimal](18, 2) NULL
: 雙程距離,精度為18,總位數2位小數,可以為空。主鍵約束:
CONSTRAINT [PK_GHG_MST_COMMUTE] PRIMARY KEY CLUSTERED
(
[USER_ID] ASC
)
USER_ID
列,表示每個用戶的 ID 都是唯一的,並以升序排列。索引及存儲設置:
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF)
: 這些選項用於配置主鍵索引的行為,比如是否允許行鎖和頁鎖等。ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
: 指定表的數據和 BLOB 類型數據(如 nvarchar(max)
)存儲在 PRIMARY
文件組中。該表的設計用於記錄用戶的通勤信息,如通勤日期、交通方式、單程和雙程的距離等。表的主鍵是 USER_ID
,確保每個用戶的記錄是唯一的。
產生Models裡面類別檔dao>按:建置>
namespace WebApplication5.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("GHG_MST_COMMUTE")]
public partial class GHG_MST_COMMUTE
{
[Column(TypeName = "datetime2")]
public DateTime USEDT { get; set; }
[Display(Name = "員工編號")]
[Key]
[Required]
[StringLength(200)]
public string USER_ID { get; set; }
[Display(Name = "姓名")]
[Required]
[StringLength(200)]
public string USER_NAME { get; set; }
[Display(Name = "交通工具")]
[Required]
[StringLength(200)]
public string TRANSPORTATION { get; set; }
[Display(Name = "單程公里數")]
[Required]
public decimal? ONEWAY_KM { get; set; }
[Display(Name = "來回公里數")]
/*public decimal? DOUBLE_KM { get; set; }*/
public decimal? DOUBLE_KM
{
get { return ONEWAY_KM * 2; }
set { ONEWAY_KM = value / 2; }
}
[Display(Name = "建立時間")]
public DateTime? data { get; set; }
[Display(Name = "建立者")]
public string CreatedBy { get; set; }
}
}
解釋程式碼
這段程式碼定義了一個名為 GHG_MST_COMMUTE
的部分類別,該類別對應資料庫中的表格 "GHG_MST_COMMUTE"。這是一個用於儲存員工通勤相關資料的資料模型,使用了 Entity Framework 進行資料庫的操作。以下是對程式碼的詳細解釋:
命名空間與引用:
namespace WebApplication5.Models
:類別屬於 WebApplication5.Models
命名空間。using System.ComponentModel.DataAnnotations
和 using System.ComponentModel.DataAnnotations.Schema
:這些引用提供了資料註解功能,如資料驗證和資料庫欄位對應。類別定義:
public partial class GHG_MST_COMMUTE
:類別是 partial
類別,表示它可能在不同的檔案中擁有其他部分。[Table("GHG_MST_COMMUTE")]
:表示這個類別對應資料庫中的表格 "GHG_MST_COMMUTE"。屬性定義:
public DateTime USEDT { get; set; }
:對應資料庫中的 USEDT
欄位,使用 datetime2
型別來表示日期時間。
public string USER_ID { get; set; }
:
[Key]
:表示 USER_ID
是主鍵。[Required]
:此欄位是必填的,不能為空。[StringLength(200)]
:此欄位的最大長度為 200。[Display(Name = "員工編號")]
:指定在前端顯示時的標籤名稱為 "員工編號"。public string USER_NAME { get; set; }
:
public string TRANSPORTATION { get; set; }
:
public decimal? ONEWAY_KM { get; set; }
:
null
),顯示名稱為 "單程公里數"。public decimal? DOUBLE_KM
:
ONEWAY_KM
自動計算。當 DOUBLE_KM
被設定時,ONEWAY_KM
會自動更新。get { return ONEWAY_KM * 2; }
:來回公里數等於單程公里數乘以 2。set { ONEWAY_KM = value / 2; }
:當設定來回公里數時,單程公里數會是來回公里數的一半。public DateTime? data { get; set; }
:建立時間,允許為空,顯示名稱為 "建立時間"。
public string CreatedBy { get; set; }
:紀錄該條數據的建立者。
這個類別主要是用於對應資料庫中的 "GHG_MST_COMMUTE" 表,存儲有關員工通勤的資料。包含的資訊有員工編號、姓名、交通工具、單程與來回公里數等。
Controllers裡面的Entities>
public ActionResult GHG_MST_COMMUTE_Index(string userId, int page = 1)
{
int currentPage = page < 1 ? 1 : page;
var allProducts = _db.GHG_MST_COMMUTE.ToList(); // 最初獲取所有數據
var products = _db.GHG_MST_COMMUTE.AsQueryable();
// 如果提供了參數,則應用篩選
if (!string.IsNullOrEmpty(userId))
{
products = products.Where(x => x.USER_ID == userId);
}
products = products.OrderBy(x => x.USER_ID);
var filteredProducts = products;
// 根據年份進行附加篩選
var result = filteredProducts.ToPagedList(currentPage, pageSize);
// 將數據和篩選條件存儲在 ViewBag 中,以便在視圖中使用
ViewBag.UserId = userId;
ViewBag.AllProducts = allProducts;
// 將 year 儲存到 ViewBag
return View(result);
}
解釋程式碼
這段 C# 代碼屬於 ASP.NET MVC 框架中的一個控制器動作方法,名為 GHG_MST_COMMUTE_Index
,用於顯示分頁和篩選後的數據。
以下是詳細解釋:
方法參數:
string userId
: 該參數用於接收用戶ID,如果提供了該值,則會根據它對數據進行篩選。int page = 1
: 這是分頁的頁碼,默認為1。設置當前頁:
int currentPage = page < 1 ? 1 : page;
如果 page
參數小於1,將強制設置當前頁為1,否則保持提供的頁碼。
獲取所有數據:
var allProducts = _db.GHG_MST_COMMUTE.ToList();
從數據庫中獲取 GHG_MST_COMMUTE
表的所有數據,並存儲在 allProducts
變量中。
構建查詢:
var products = _db.GHG_MST_COMMUTE.AsQueryable();
使用 AsQueryable
方法將表轉為查詢對象,以便在之後根據條件動態添加篩選。
根據 userId
進行篩選:
if (!string.IsNullOrEmpty(userId))
{
products = products.Where(x => x.USER_ID == userId);
}
如果 userId
參數不為空或不為 null,使用 Where
子句篩選出 USER_ID
匹配的記錄。
按 USER_ID
排序:
products = products.OrderBy(x => x.USER_ID);
分頁處理:
var result = filteredProducts.ToPagedList(currentPage, pageSize);
使用分頁庫(如 PagedList
),將查詢結果分頁展示。currentPage
是當前頁碼,pageSize
是每頁的記錄數量。
存儲數據到 ViewBag:
ViewBag.UserId = userId;
:存儲傳入的 userId
,以便在視圖中回顯或繼續使用。ViewBag.AllProducts = allProducts;
:存儲所有產品的列表,可能在視圖中展示所有記錄。返回視圖:
return View(result);
將處理過的數據傳遞給視圖進行展示。
GHG_MST_COMMUTE
表記錄。產生畫面View程式碼
@using PagedList
@using PagedList.Mvc
@model IPagedList<WebApplication5.Models.GHG_MST_COMMUTE>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
ViewBag.Title = "GHG_MST_COMMUTE_Index";
}
<h2>作品-員工通勤</h2>
<style>
.align-right {
text-align: right;
}
</style>
<link href="~/Content/PagedList.css" rel="stylesheet" />
<!DOCTYPE html>
<div style="margin-top: 50px;">
<h2>員工通勤:列表</h2>
<p>
@Html.ActionLink("員工通勤:新增", "GHG_MST_COMMUTECreate", null, new { @class = "btn btn-danger" })
@*@Html.ActionLink("員工通勤:新增", "GHG_MST_COMMUTECreate")*@
</p>
@using (Html.BeginForm("GHG_MST_COMMUTE_Index", "Home", FormMethod.Get))
{
<p>
員工編號: @Html.TextBox("userId")
<input type="submit" value="搜索" />
</p>
}
</div>
<table class="table" style="margin-top: 20px;">
<thead>
<tr>
@*
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().USEDT)
</th>*@
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().USER_ID)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().USER_NAME)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().TRANSPORTATION)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().ONEWAY_KM)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().DOUBLE_KM)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
@*<td>
@Html.DisplayFor(modelItem => item.USEDT)
</td>*@
<td>
@Html.DisplayFor(modelItem => item.USER_ID)
</td>
<td>
@Html.DisplayFor(modelItem => item.USER_NAME)
</td>
<td>
@Html.DisplayFor(modelItem => item.TRANSPORTATION)
</td>
<td class="align-right">
@Html.DisplayFor(modelItem => item.ONEWAY_KM)
</td>
<td class="align-right">
@Html.DisplayFor(modelItem => item.DOUBLE_KM)
</td>
<td>
@Html.ActionLink("修改", "GHG_MST_COMMUTE_Edit", new { id = item.USER_ID })
@*@Html.ActionLink("Details", "Details", new { id = item.USER_ID }) |*@
@*@Html.ActionLink("Delete", "Delete", new { id = item.USER_ID })*@
</td>
</tr>
}
</tbody>
</table>
@Html.PagedListPager(Model, page => Url.Action("GHG_MST_COMMUTE_Index", new
{
page
}))
</body>
</html>
解釋程式碼
這段代碼是一個 ASP.NET MVC 視圖文件,使用了 PagedList 庫進行分頁展示數據,以下是其詳細解釋:
@using PagedList
@using PagedList.Mvc
@model IPagedList<WebApplication5.Models.GHG_MST_COMMUTE>
@using PagedList
和 @using PagedList.Mvc
引入了分頁庫 PagedList 的命名空間,用於處理分頁功能。@model IPagedList<WebApplication5.Models.GHG_MST_COMMUTE>
指定了視圖的模型類型為 IPagedList
,它封裝了來自 GHG_MST_COMMUTE
表的數據模型,用於分頁顯示。@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
ViewBag.Title = "GHG_MST_COMMUTE_Index";
}
Layout
指定使用的布局文件為 ~/Views/Shared/_Layout.cshtml
。ViewBag.Title
設置頁面的標題為 "GHG_MST_COMMUTE_Index"
。<h2>作品-員工通勤</h2>
<style>
.align-right {
text-align: right;
}
</style>
<link href="~/Content/PagedList.css" rel="stylesheet" />
作品-員工通勤
用於描述頁面的主題。align-right
將表格的某些列內容右對齊。PagedList.css
樣式文件,格式化分頁控件的樣式。<div style="margin-top: 50px;">
<h2>員工通勤:列表</h2>
<p>
@Html.ActionLink("員工通勤:新增", "GHG_MST_COMMUTECreate", null, new { @class = "btn btn-danger" })
</p>
@using (Html.BeginForm("GHG_MST_COMMUTE_Index", "Home", FormMethod.Get))
{
<p>
員工編號: @Html.TextBox("userId")
<input type="submit" value="搜索" />
</p>
}
</div>
ActionLink
:生成一個跳轉到 GHG_MST_COMMUTECreate
動作方法的鏈接,用於創建新的員工通勤記錄。按鈕使用了 btn btn-danger
樣式類。Html.BeginForm
:生成搜索表單,使用 GET
方法發送請求,提供一個 userId
文本框用於搜索指定員工編號的通勤數據。<table class="table" style="margin-top: 20px;">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.FirstOrDefault().USER_ID)</th>
<th>@Html.DisplayNameFor(model => model.FirstOrDefault().USER_NAME)</th>
<th>@Html.DisplayNameFor(model => model.FirstOrDefault().TRANSPORTATION)</th>
<th>@Html.DisplayNameFor(model => model.FirstOrDefault().ONEWAY_KM)</th>
<th>@Html.DisplayNameFor(model => model.FirstOrDefault().DOUBLE_KM)</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.USER_ID)</td>
<td>@Html.DisplayFor(modelItem => item.USER_NAME)</td>
<td>@Html.DisplayFor(modelItem => item.TRANSPORTATION)</td>
<td class="align-right">@Html.DisplayFor(modelItem => item.ONEWAY_KM)</td>
<td class="align-right">@Html.DisplayFor(modelItem => item.DOUBLE_KM)</td>
<td>
@Html.ActionLink("修改", "GHG_MST_COMMUTE_Edit", new { id = item.USER_ID })
</td>
</tr>
}
</tbody>
</table>
DisplayNameFor
:顯示列的名稱,根據模型的屬性名自動生成表頭文字,如 USER_ID
, USER_NAME
, TRANSPORTATION
。DisplayFor
:用於在表格中展示每個記錄的具體值,顯示員工的編號、姓名、交通方式、單程公里數和雙程公里數。align-right
:將 ONEWAY_KM
和 DOUBLE_KM
列的文本右對齊。ActionLink
:生成修改按鈕,跳轉到編輯頁面,用 USER_ID
作為參數。@Html.PagedListPager(Model, page => Url.Action("GHG_MST_COMMUTE_Index", new { page }))
PagedListPager
:生成分頁控件,基於當前頁面的數據模型進行分頁。每次點擊分頁按鈕時,會向 GHG_MST_COMMUTE_Index
動作發送請求,傳遞頁碼 page
作為參數。該視圖用於顯示 GHG_MST_COMMUTE
表中的員工通勤數據,支持分頁、搜索和基本的 CRUD 操作(目前僅顯示了新增和修改)。
大家明天見~